#pragma once
#include "std_base_type.h"

///深度行情数据   44 个字段 
struct STD_DepthMarketData
{
	///交易日
	STD_DateType	TradingDay;
	///合约代码
	STD_InstrumentIDType	InstrumentID;   
										 
	STD_ExchangeIDType	ExchangeID;
	///合约在交易所的代码
	STD_ExchangeInstIDType	ExchangeInstID;  
											  
	STD_PriceType	LastPrice;
	///上次结算价
	STD_PriceType	PreSettlementPrice;
	///昨收盘
	STD_PriceType	PreClosePrice;
	///昨持仓量
	STD_LargeVolumeType	PreOpenInterest;
	///今开盘
	STD_PriceType	OpenPrice;
	///最高价
	STD_PriceType	HighestPrice;
	///最低价
	STD_PriceType	LowestPrice;
	///数量
	STD_VolumeType	Volume;
	///成交金额
	STD_MoneyType	Turnover;
	///持仓量
	STD_LargeVolumeType	OpenInterest;
	///今收盘
	STD_PriceType	ClosePrice;
	///本次结算价
	STD_PriceType	SettlementPrice;
	///涨停板价
	STD_PriceType	UpperLimitPrice;
	///跌停板价
	STD_PriceType	LowerLimitPrice;
	///昨虚实度
	STD_RatioType	PreDelta;
	///今虚实度
	STD_RatioType	CurrDelta;
	///最后修改时间
	STD_TimeType	UpdateTime;
	///最后修改毫秒
	STD_MillisecType	UpdateMillisec;
	///申买价一
	STD_PriceType	BidPrice1;
	///申买量一
	STD_VolumeType	BidVolume1;
	///申卖价一
	STD_PriceType	AskPrice1;
	///申卖量一
	STD_VolumeType	AskVolume1;
	///申买价二
	STD_PriceType	BidPrice2;
	///申买量二
	STD_VolumeType	BidVolume2;
	///申卖价二
	STD_PriceType	AskPrice2;
	///申卖量二
	STD_VolumeType	AskVolume2;
	///申买价三
	STD_PriceType	BidPrice3;
	///申买量三
	STD_VolumeType	BidVolume3;
	///申卖价三
	STD_PriceType	AskPrice3;
	///申卖量三
	STD_VolumeType	AskVolume3;
	///申买价四
	STD_PriceType	BidPrice4;
	///申买量四
	STD_VolumeType	BidVolume4;
	///申卖价四
	STD_PriceType	AskPrice4;
	///申卖量四
	STD_VolumeType	AskVolume4;
	///申买价五
	STD_PriceType	BidPrice5;
	///申买量五
	STD_VolumeType	BidVolume5;
	///申卖价五
	STD_PriceType	AskPrice5;
	///申卖量五
	STD_VolumeType	AskVolume5;
	///当日均价
	STD_PriceType	AveragePrice;
	///业务日期
	STD_DateType	ActionDay;
	///上带价
	STD_PriceType BandingUpperPrice;  //min  V 1.6.0 新增
									  ///下带价
	STD_PriceType BandingLowerPrice;  //min  V 1.6.0 新增
};


// K线数据结构
struct  STD_kdata {
	STD_DateType	TradingDay;  ///交易所定义的交易日
	STD_DateType	ActionDay;  ///实际的交易日
	long long UpdateTime; 	// 更新时间
	int  Time;      ///时间  hhmmssmmm
	STD_PriceType Open;
	STD_PriceType High;
	STD_PriceType Low;
	STD_PriceType Close;
	STD_VolumeType	StartVolume;  ///起始成交量
	STD_VolumeType	Volume;  ///成交量
	STD_LargeVolumeType	OpenInterest;  ///持仓量
};

struct MarketTime
{
	STD_InstrumentIDType symbol;
	int N_start; // 夜盘开始时间
	int N_end;   // 夜盘结束
	int AM_start;  //早盘开始 
	int AM_end;
	int PM_start; // 下午开始
	int PM_end;   //150000  hhmmss
	// 用作标记当前合约的kbar 存储状态
	bool en_strore_kbar;
};











#define STATE_K_INTEGER_TAB 	\
		X_MACRO( NO_PERIOD, 		0)		\
		X_MACRO( S1, 	    1)		\
		X_MACRO( S5, 		5)		\
		X_MACRO( S10, 		10)		\
		X_MACRO( S15, 		15)		\
		X_MACRO( S30, 		30)		\
		X_MACRO( M1, 		60)		\
		X_MACRO( M3, 		180)		\
		X_MACRO( M5, 		300)		\
		X_MACRO( M7, 		420)		\
		X_MACRO( M10, 		600)		\
		X_MACRO( M15, 		900)		\
		X_MACRO( M30, 		1800)		\
		X_MACRO( M60, 		3600)		\
		X_MACRO( M120, 		7200)		\
		X_MACRO( M240, 		14400)		\
		X_MACRO( D1, 		18000)		\
		X_MACRO( W1, 		90000)		\
		X_MACRO( Mon1, 		360000)		\
		X_MACRO( K_INTEGERMAX, 		20)	 
// K线周期 时间枚举变量 

enum K_INTEGER {
#define X_MACRO(a, b)  a=b,
	STATE_K_INTEGER_TAB
#undef X_MACRO
	//	NO_PERIOD = 0, S1 = 1, S5 = 5, S10 = 10, S15 = 15, S30 = 30, M1 = 60, M3 = 180, M5 = 300, M7 = 420,
	//	M10 = 600, M15 = 900, M30 = 1800, M60 = 3600, M120 = 7200, M240 = 14400,
	//	D1 = 18000, W1 = 90000, Mon1 = 360000, K_INTEGERMAX = 20, //日线 周线 月度线  按照 日期计算   // 注意： K_INTEGERMAX  数值表示 个数， 不能随意改变 
};

enum K_UPDATE_STAT
{
	//  更新已存在K线      正在结束当前K线          生成新K线        无效的时间			申请内存出错
	UPDATE_EXSIT_K = 0, FINISH_CURR_K = 1, GEN_NEW_K = 2, INVALID_K_TIME = 10, INVALID_K_DATA = 11, MALLOC_ERROR = 12,
};


 
